#include "rendererandtexture.h"
#include <SDL.h>

RendererAndTexture::RendererAndTexture() {}

void RendererAndTexture::rendererAndTexture()
{
    SDL_Init(SDL_INIT_VIDEO);

    // SDL_WINDOWPOS_UNDEFINED 居中
    // SDL_WINDOW_OPENGL：支持OpenGL，SDL_WINDOW_RESIZABLE：允许用户调整窗口大小
    SDL_Window* window = SDL_CreateWindow("SDL窗口",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
                                          800,600,SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);

    // 参数：window：指定关联的窗口 、-1（自动选择）：选择渲染驱动（显卡）、0（无特殊）：渲染器特性标志
    SDL_Renderer* renderer = SDL_CreateRenderer(window,-1,0);

    // 1.纹理关联的渲染器 2.纹理的像素格式 3.纹理的访问模式 4.纹理宽度（像素） 5.纹理高度（像素）
    // SDL_PIXELFORMAT_ABGR8888，ARGB顺序（旧系统兼容）
    // SDL_TEXTUREACCESS_TARGET 纹理可作为渲染目标，离屏渲染（先画到纹理再复制到窗口）
    SDL_Texture* texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_ABGR8888,
                                             SDL_TEXTUREACCESS_TARGET,800,600);

    SDL_Rect rect;
    rect.x = 100;
    rect.y = 100;
    rect.h = 100;
    rect.w = 100;

    static int count = 0;

    while(count <= 100)
    {
        // 为渲染器设置纹理
        SDL_SetRenderTarget(renderer,texture);
        SDL_SetRenderDrawColor(renderer,255,0,0,255);
        SDL_RenderClear(renderer);

        rect.x += count;
        if(rect.x >= 700)
        {
            rect.x = 0;
        }

        SDL_RenderDrawRect(renderer,&rect);
        SDL_SetRenderDrawColor(renderer,255,255,255,255);
        SDL_RenderFillRect(renderer,&rect);

        // 设置渲染目标为窗口
        SDL_SetRenderTarget(renderer,NULL);
        // 拷贝纹理到CPU中
        SDL_RenderCopy(renderer,texture,NULL,NULL);

        // 输出渲染器渲染的内容
        SDL_RenderPresent(renderer);
        SDL_Delay(50);

        count++;
    }

    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return;
}
